$( document ).ready(function() {
	$("[data-rodada]").click( onClickMudarRodada );
	$("[data-rodada='combo']").trigger("click");
	
});

function formataColunaPlacar(){
	$('table.tabela-jogos tbody tr').each(function(){
		var isResultadoLancado = $(this).find('td.placar').text().trim() != "X";
		if (isResultadoLancado){
			$(this).find('input').attr('disabled', 'true');
		}
		else{
			$(this).find('span.num-gols').text("?");
		}
	});
}
function adicionaBandeiras(){
	$(".time").each(function(){
		var timeMinusculo = $(this).text().trim().toLowerCase();
		$(this).find(".escudo").addClass("escudo-"+timeMinusculo);
	});
}
function incrementaJogoCount(){
	$(".jogo-count").each(function(){
		var count = parseInt($(this).html());
		$(this).html(count+1);
	});
}
function prepararListagemPalpites(){
	//o handle bar nao reconhece o name "palpite.numGolsMandante", apenas a ultima parte: "numGolsMandante",
	//logo foi necessario colocar o "palpite." através de uma função
	$("input[type='number'], input[type='hidden']").each(function(){
		var nomeAntigo = $(this).attr("name");
		var nomeNovo = "palpite." + nomeAntigo;
		$(this).attr("name", nomeNovo);
	});
	adicionaBandeiras();
	incrementaJogoCount();
	formataColunaPlacar();
	$("input[data-function='enviarPalpite']").click( onClickEnviarPalpite );
}
function onClickMudarRodada(){
	
	var rodadaEscolhida = getRodadaEscolhida($(this));
	desabilitarOuHabilitarBotaoNavegacao(rodadaEscolhida);
	$("[data-rodada='combo']").val(rodadaEscolhida);
	
	var dataToSend = {"rodada": rodadaEscolhida};
	$.ajax({
		type		: "POST",
		url			: "json/palpites.do",
		data		: dataToSend, 
		success 	: function(data) { 
//			$("#tabelaPalpites").html(data);
			var templateLista = $("#template-tabela-palpites").html();
	 		var template = Handlebars.compile(templateLista);	
	 		$("#tabelaPalpites").html(template(data));
	 		
	 		prepararListagemPalpites();
		},
		error		: function (xhr, ajaxOptions, thrownError) {
	        alert(xhr.status);
			}
	});
}

function getRodadaEscolhida(self) {
	if (self.attr("data-rodada") == "proxima")  { return parseInt($("[data-rodada='combo']").val())+1; }
	if (self.attr("data-rodada") == "anterior")	{ return parseInt($("[data-rodada='combo']").val())-1; }
	else	{ return self.val(); }
}

function desabilitarOuHabilitarBotaoNavegacao(rodadaEscolhida){
	var primeiraRodada = 1;
	var ultimaRodada = 38;
	
	$("[data-rodada='anterior'],[data-rodada='proxima']").attr("disabled", false);
	
	if (rodadaEscolhida == primeiraRodada)
		$("[data-rodada='anterior']").attr("disabled", true);
	else 
	if (rodadaEscolhida == ultimaRodada)
		$("[data-rodada='proxima']").attr("disabled", true);
}

function onClickEnviarPalpite(){
	var context = $(this).parents( "tr" );
	var dataToSend = context.find(":input").serialize();

	if(!validarCamposRequired(context.find("input[type='number']"))){
		setStatusLancamentoPalpite( context, "erro" );
		return; 
	}

	mudarCursorAposEnviarPalpite(context);
	$(this).attr("disabled", true);
	setStatusLancamentoPalpite( context, "loading" );

	$.ajax({
		type		: "POST",
		url			: "enviarPalpite.do",
		data		: dataToSend, 
		success 	: function(data) { 
			tratarRetornoEnviarPalpite(data, context) 
			},
		error 		: function(data) { 
			tratarRetornoEnviarPalpite(data, context) 
			}
	});
}

function mudarCursorAposEnviarPalpite(context) {
	if( context.next().length != 0 )
		context.next().find("input[type='number']").first().focus();
	else
		$("[data-rodada='proxima']").focus();
}

function tratarRetornoEnviarPalpite(data, context){
	context.find("input[data-function='enviarPalpite']").attr("disabled", false);
	if( data == "success" ){
		setStatusLancamentoPalpite( context, "lancado" );
	} else {
		setStatusLancamentoPalpite( context, "erro" );
	}
}

function validarCamposRequired(campos){
	var existeCampoVazio = false;
	
	$(campos).each(function(){
		if($(this).val() == ""){
			existeCampoVazio = true;

			$(this).addClass("invalido")
				   .focusin(function() { $(this).removeClass("invalido"); });
		}
	});
	
	return !existeCampoVazio;
}

function setStatusLancamentoPalpite( context, status ){
	var divStatus = context.find("[data-status]");
	
	switch ( status ) {
	case "loading":
		divStatus.attr("data-status", "loading").removeAttr("title");
		break;
	case "lancado":
		divStatus.attr("data-status", "lancado").attr("title", "Palpite Lan\u00e7ado");
		break;
	case "erro":
		divStatus.attr("data-status", "erro").attr("title", "Erro ao lan\u00e7ar o palpite");
		break;
	}
}
